/*
 * @lc app=leetcode.cn id=278 lang=typescript
 *
 * [278] 第一个错误的版本
 */

// @lc code=start
/**
 * The knows API is defined in the parent class Relation.
 * isBadVersion(version: number): boolean {
 *     ...
 * };
 */

// TODO 双指针法
var solution = function (isBadVersion: (ver: number) => boolean) {
    return function self(n: number): number {
        let left = 1;
        let right = n;

        // 等于时不用考虑
        while (left < right) {
            const midVal = Math.floor((left + right) / 2);
            if (isBadVersion(midVal)) {
                // 缩小区间，把右侧坏指针移动向中间
                right = midVal;
            } else {
                // 把好指针移向 midVal, 因为 midVal 本身为好，那么要找下一个，那么就需要加一，这样left 才能成为最后值。
                left = midVal + 1;
            }
        }
        return left;
    };
};
// @lc code=end
